import { message } from 'antd';
import { WeaLocaleProvider } from 'ecCom';

const getLabel = WeaLocaleProvider.getLabel;
/**
 *
 * @param SuccOrFailObj:一个对象，仅当这个对象的每个属性值都为类true value时，才会是成功提示，否则都会失败提示
 * @param messType:
 * @param succText
 * @param failText
 */
export const messagesOfoperateResult = function ({
  SuccOrFailObj,
  succText = '',
  failText = '',
  success,
  fail,
}) {
  for (let attr in SuccOrFailObj) {
    if (!SuccOrFailObj[attr]) {
      failText &&
        message.error(
          failText === 'repeat' ? getLabel('26603', '名称重复') : failText,
        );
      fail && fail();
      return;
    }
  }

  succText && message.success(succText);
  success && success();
};

/*
	参数解释：
	fn：需要被延迟执行的函数或事务处理函数
	interval：指定事务处理函数每次被调用间的时间间隔
*/
export function throttle(fn, isArrowFn = false, interval) {
  let __self = fn, // 保存需要被延迟执行的函数引用
    timer, // 定时器
    firstTime = true; // 是否是第一次调用
  return function (...args) {
    let __me = isArrowFn ? null : this;
    if (firstTime) {
      // 如果是第一次调用，不需延迟执行
      __self.apply(__me, args);
      return (firstTime = false);
    }
    if (timer) {
      // 如果定时器还在，说明前一次延迟执行还没有完成
      return false;
    }

    timer = setTimeout(() => {
      // 延迟一段时间执行
      clearTimeout(timer);

      timer = null;
      !isArrowFn ? __self.apply(__me, args) : __self(args);
    }, interval || 500);
  };
}
